home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windows Expert
/
Windows Expert.iso
/
utility
/
uwserver.zip
/
uwserver.tar
/
lib
/
uw_optcmd.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-01-25
|
2KB
|
81 lines
/*
* uw library - uw_optcmd
*
* Copyright 1986 by John D. Bruner. All rights reserved. Permission to
* copy this program is given provided that the copy is not sold and that
* this copyright notice is included.
*/
#include <sys/types.h>
#include <netinet/in.h>
#include "uwlib.h"
#ifndef htons
/* These should have been defined in <netinet/in.h>, but weren't (in 4.2BSD) */
extern unsigned short htons(), ntohs();
extern unsigned long htonl(), ntohl();
#endif
uw_optcmd(uwin, optnum, optcmd, optval)
UWIN uwin;
uwopt_t optnum;
uwoptcmd_t optcmd;
union uwoptval *optval;
{
register int len;
struct uwipc uwip;
extern int errno;
/*
* Send an option command string to the server (and eventually
* to the Macintosh).
*/
if (uwin != (UWIN)0) {
if (uwin->uwi_ctlfd >= 0) {
if (optnum < UW_NUMOPTS) {
len = sizeof uwip;
uwip.uwip_len = htons(len);
uwip.uwip_cmd = htons(UWC_OPTION);
uwip.uwip_option.uwop_id = htonl(uwin->uwi_id);
uwip.uwip_option.uwop_opt = htons(optnum);
uwip.uwip_option.uwop_cmd = htons(optcmd);
switch (optcmd) {
case UWOC_SET:
if (optval == (union uwoptval *)0) {
uwin->uwi_uwerr = UWE_INVAL;
break;
}
uwip.uwip_option.uwop_val = *optval;
uw_hton(uwin->uwi_type, optnum,
(char *)&uwip.uwip_option.uwop_val);
/* no break */
case UWOC_ASK:
case UWOC_DO:
case UWOC_DONT:
case UWOC_WILL:
case UWOC_WONT:
if (write(uwin->uwi_ctlfd, (char *)&uwip,
len) < 0) {
uwin->uwi_uwerr = UWE_ERRNO;
uwin->uwi_errno = errno;
} else
uwin->uwi_uwerr = UWE_NONE;
break;
default:
uwin->uwi_uwerr = UWE_INVAL;
break;
}
} else
uwin->uwi_uwerr = UWE_INVAL;
}
uwerrno = uwin->uwi_uwerr;
if (uwin->uwi_uwerr == UWE_NONE)
return(0);
else
return(-1);
} else {
uwerrno = UWE_INVAL;
return(-1);
}
}